var Base64 = {
 
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = Base64._utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
		}
 
		return output;
	},
 
	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length) {
 
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
 
		}
 
		output = Base64._utf8_decode(output);
 
		return output;
 
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}

function checkBrowserEnableCookie(){var cookieEnabled=(navigator.cookieEnabled)?true:false
if(typeof navigator.cookieEnabled=="undefined"&&!cookieEnabled){document.cookie="testcookie"
cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)?true:false}
if(cookieEnabled)return true;else return false;}

function createCookie(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+Base64.encode(value)+expires+"; path=/;";}

function readCookie(name){
	var nameEQ=name+"=";
	var ca=document.cookie.split(';');
	for(var i=0;i<ca.length;i++){
		var c=ca[i];
		while(c.charAt(0)==' ')c=c.substring(1,c.length);
		if(c.indexOf(nameEQ)==0) return Base64.decode(c.substring(nameEQ.length,c.length));
	}
	return null;
}


function eraseCookie(name){createCookie(name,"",-1);}
function countShoppingCart(name){
	
	var cart_holder_number = document.getElementById('count_shopping_cart_store');
	var cart_holder_total = document.getElementById('total_shopping_cart_store');
	
	if(readCookie(name)==null){
		createCookie(name,'-',1);
		if(cart_holder_number != 'underfined' && cart_holder_number != null){
			cart_holder_number.innerHTML=0;
		}
		
	}else{
		var current_cart=readCookie(name);
		//alert(current_cart);
		
		var ca=current_cart.split(',');
		number_product=ca.length;
		
		if(cart_holder_number != 'underfined' && cart_holder_number != null){
			cart_holder_number.innerHTML=number_product-1;
		}
		
		if(cart_holder_total != 'underfined' && cart_holder_total != null){
			if($("#total_shopping_cart_store").length > 0) {
				//count total value
				var total_value = 0;
				for(var i=0;i<ca.length;i++){
					item_content = ca[i];
					if(item_content.length > 1){
						item_detail = item_content.split("-");
						item_type = item_detail[0];
						pro_id = item_detail[1];
						pro_quantity = parseInt(item_detail[2]);
						unit_price = parseInt(item_detail[3]);
						total_value += unit_price * pro_quantity;
					}
				}
				cart_holder_total.innerHTML = writeStringToPrice(total_value +'');
			}
		}
}}

function emptyShoppingCart(name){createCookie(name,'-',1);}

//item_type : pro, combo, deal
function addToShoppingCart(item_type,sellid,quantity,unit_price){
	if(readCookie('shopping_cart_store')==null){createCookie('shopping_cart_store',',',1);}
	var current_cart = readCookie('shopping_cart_store');
	if(current_cart.search(','+item_type+'-'+sellid+'-')==-1){
		var new_cart=current_cart+','+item_type+'-'+sellid+'-'+quantity+'-'+unit_price;
		createCookie('shopping_cart_store',new_cart,1);	
		window.location = '/gio-hang';	
	}else{	
		alert('Sản phẩm đã có trong giỏ hàng!');
	}}

function isItemInCart(item_type, sellid){var current_cart=readCookie('shopping_cart_store');	if(current_cart != null && current_cart.search(','+item_type+'-'+sellid+'-')!=-1){document.write('Đang trong giỏ hàng');}}

function deleteShoppingCartItem(item_type, sellid,quantity,unit_price){if(confirm('Bạn muốn xóa bỏ sản phẩm này khỏi giỏ hàng ? ')){		removeShoppingCartItem(item_type, sellid,quantity,unit_price);window.location='/gio-hang';	}}

function removeShoppingCartItem(item_type,sellid,quantity,unit_price){	
	var current_cart=readCookie('shopping_cart_store');
	current_cart += ",";
	var re = new RegExp(","+item_type+"-"+sellid+"-([0-9]+)-([0-9]+),","i");	
	new_cart = current_cart.replace(re, ",");
	new_cart = new_cart.substr(0, new_cart.length-1);	
	createCookie('shopping_cart_store',new_cart,1);
}

function writeStringToPrice(str){
	var first_group = str.substr(0,str.length % 3);
	var remain_group = str.replace(first_group,"");
	var num_group = remain_group.length/3;
	var result = "";
	for(var i=0;i < num_group;i++){
		group_of_three = remain_group.substr(i*3,3);
		result += group_of_three;
		if(i != (num_group-1)) result += ".";
	}
	if(first_group.length > 0) {
		if(result != "") return first_group + "." + result ;
		else return first_group;
	}else{
		if(result != "") return result;
		else return "";
	}
}

function getItemUnitPrice(item_type, id){
	var unit_price = document.getElementById('sell_price_'+item_type+'_'+id).innerHTML;
	while(unit_price.indexOf(".") > 0){
		unit_price = unit_price.replace('.','');
	}
	unit_price = parseInt(unit_price);
	return unit_price;
}

function getItemQuantity(item_type, id){
	var quantity = document.getElementById('quantity_'+item_type+'_'+id).value;
	quantity = parseInt(quantity);
	return quantity;
}

function updatePrice(item_type, id, new_quantity){
	if(!check_interger(new_quantity)){
		alert('Vui lòng nhập số > 0');
		//reset quantity
		new_quantity = 1;
		$("#quantity_"+item_type+'_'+id).val(new_quantity);
	}
/*	else{
		unit_price = getItemUnitPrice(id);
		document.getElementById('price_'+id).innerHTML = writeStringToPrice(unit_price * new_quantity + '');
		reCountTotal();
	}
*/	
	show_cart_total(item_type, id, new_quantity);
}

function show_cart_total(item_type, id, quantity){
	unit_price = getItemUnitPrice(item_type, id);
	document.getElementById('price_'+item_type+'_'+id).innerHTML = writeStringToPrice(unit_price * quantity + '');
	reCountTotal();
}

function updatePriceAndCheckStock(item_type, id, new_quantity, max_stock, current_quantity){
	if(!check_interger(new_quantity)){
		alert('Vui lòng nhập số > 0');
		//reset quantity
		new_quantity = current_quantity;
		$("#quantity_"+item_type+'_'+id).val(current_quantity);
	}else{
		if(new_quantity > max_stock) {
			alert('Hiện tại trong kho chỉ có '+max_stock+' sản phẩm này, quý khách vui lòng nhập lại');	
			//reset quantity
			new_quantity = current_quantity;
			$("#quantity_"+item_type+'_'+id).val(current_quantity);
		}
		/*else{
			unit_price = getItemUnitPrice(id);
			document.getElementById('price_'+id).innerHTML = writeStringToPrice(unit_price * new_quantity + '');
			reCountTotal();
		}*/
	}
	
	show_cart_total(item_type, id, new_quantity);
}

function check_interger(quantity){
	var intRegex = /^\d+$/;
	if(intRegex.test(quantity)) {
		if(parseInt(quantity) > 0) return true;
		else return false;
	}	
	return false;
}

function reCountTotal(){
	var new_cart = "";
	var all_item = 	document.getElementById('item_update_quantity').value;
	all_item_array = all_item.split(",");
	var total_price = 0;
	combo_array = new Array();
	for(var i=0;i<all_item_array.length;i++){
		item_id = all_item_array[i];
		if(item_id.length > 0){
			unformat_price = document.getElementById('sell_price_'+item_id.replace("-","_")).innerHTML;
			while(unformat_price.indexOf(".") > 0){
				unformat_price = unformat_price.replace('.','');
			}
			item_price = parseInt(unformat_price);
			item_quantity = parseInt(document.getElementById('quantity_'+item_id.replace("-","_")).value);
			new_cart += ","+item_id+"-"+item_quantity+"-"+item_price;
			total_price += item_price * item_quantity;
		}
	}
	createCookie('shopping_cart_store',new_cart,1);
	document.getElementById('total_value').innerHTML = writeStringToPrice(total_price + '');
	document.getElementById('total_cart_value').value = total_price;
	
	var cart_holder_total = document.getElementById('total_shopping_cart_store');
	if(cart_holder_total != 'undefined' && cart_holder_total != null){
		cart_holder_total.innerHTML=writeStringToPrice(total_price + '');
	}
		
}

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function makeUrlAcceptQuery(url){
	if(url.search("?") > 0) return url;
	else return url + "?";
}

function checkCartForm(){
	//check cart has item
	var current_cart=readCookie("shopping_cart_store"); 
	var ca=current_cart.split(','); 
	number_product=ca.length;
	if(number_product <=1 ){
		if(confirm("Giỏ hàng chưa có sản phẩm. Vui lòng chọn sản phẩm vào giỏ hàng")){
			window.location = "/";	
		}; 
		return false;
	}else{
		//check user information
		var error = "";
		var check_name = document.getElementById('buyer_name').value;
		if(check_name.length < 4) error += "- Bạn chưa nhập tên\n";
		var check_tel = document.getElementById('buyer_mobile').value;
		if(check_tel.length < 5) error += "- Bạn chưa nhập số di động\n";
		var check_add = document.getElementById('buyer_address').value;
		if(check_add.length < 10) error += "- Bạn chưa nhập địa chỉ";
		//var check_note = document.getElementById('buyer_note').value;
		//if(check_name.length < 4) error += "- Bạn chưa nhập tên\n";
		if(error != "") {
			alert(error); return false;	
		}
		return true;
	}
}

function add_compare_product(productId) {
	var current_list = document.getElementById("product_compare_list"); 
	if(current_list == 'undefined' || current_list == null){
		alert("Cần có biến product_compare_list trong template");
		return false;	
	}
	if(current_list.value == '') current_list.value = ",";
	//count current item
	var currentNumItem = 0;
	if(current_list.value.length > 1){
		current_list_id = current_list.value.split(",");
		currentNumItem = current_list_id.length - 1;
	}
	
	var check_box_id = document.getElementById("compare_box_" + productId); 
	var text_compare = document.getElementById("text_compare_" + productId);
    if (check_box_id.checked) {
        if (currentNumItem > 6) {
            //Cho phep so sánh tối đa 3 sản phẩm
            check_box_id.checked = "";
            alert("Bạn chỉ có thể so sánh tối đa 6 sản phẩm\nDanh sách đã có đủ 6");
        }
        else {
            document.getElementById("product_compare_list").value = current_list.value + productId + ",";
			if(text_compare != 'undefined' && text_compare != null){
				text_compare.innerHTML = "Chờ so sánh";
				text_compare.style.backgroundColor = '#FFCC00';
			}
        }
    } else {
        document.getElementById("product_compare_list").value = current_list.value.replace("," + productId + ",", ",");
		if(text_compare != 'undefined' && text_compare != null){
				text_compare.innerHTML = "Chọn so sánh ";
				text_compare.style.backgroundColor = '#FFF';
		}
    }
}

function compare_product(){
	var current_list = document.getElementById("product_compare_list"); 
	if(current_list == 'undefined' || current_list == null){
		alert("Cần có biến product_compare_list trong template");
		return false;	
	}	
	var currentNumItem = 0;
	if(current_list.value.length > 1){
		current_list_id = current_list.value.split(",");
		currentNumItem = current_list_id.length - 2;
	}
	
	if (currentNumItem > 1) {
		window.location = "/so-sanh?list=" + current_list.value;
	}else{
		alert("Bạn cần chọn tối thiểu 2 sản phẩm để so sánh");
		return false;
	}
}

function save_product_view_history(product_id){
	if(!check_interger(product_id)){
		return false;
	}
	var cookie_name = 'product_view_history';
	if(readCookie(cookie_name)==null){createCookie(cookie_name,',',1);}
	var current_list = readCookie(cookie_name);
	if(current_list.search(','+product_id+',')==-1){	
		var new_list=current_list+','+product_id+',';
		createCookie(cookie_name,new_list,1);	
	}
}

function remove_from_history(product_id){
	if(confirm("Bạn chắc chắn muốn xóa sản phẩm này ?")) {
		if(!check_interger(product_id)){
			return false;
		}
		var cookie_name = 'product_view_history';
		if(readCookie(cookie_name)==null){createCookie(cookie_name,',',1);}
		var current_list = readCookie(cookie_name);
		if(current_list.search(','+product_id+',') !=-1){	
			var new_list = current_list.replace(','+product_id+',', ',');
			createCookie(cookie_name,new_list,1);	
		}
		//refresh page
		window.location = window.location;
	}
}

//item_id : id cua noi dung can luu
//content: 'pro', 'article', 'procat'
function user_like_content(item_id, content){
	$.post("/ajax/user_like.php", {item_id : item_id, content_type : content}, function(data) { 
		 if(data == 'error-not-login') {
			//show login form or alert user
			if(confirm("Để sử dụng chức năng này bạn cần đăng nhập. Click OK để đăng nhập")){
				window.location = "/dang-nhap?returnTo=" + window.location;	
			} 
		 }else if(data == 'error-has-liked') {
			alert("Bạn đã lưu rồi"); 
		 }else{
			alert("Bạn đã lưu thành công"); 
		 }
	 });
}

function user_vote_review(review_id, vote){
	$.post("/ajax/vote_product_review.php", {review_id : review_id, vote : vote}, function(data) { 
		 if(data == 'error-not-login') {
			//show login form or alert user
			if(confirm("Để sử dụng chức năng này bạn cần đăng nhập. Click OK để đăng nhập")){
				window.location = "/dang-nhap?return_url=" + window.location;	
			} 
		 }else if(data == 'error-has-voted') {
			alert("Bạn đã chọn rồi"); 
		 }else{
			 
			 if(vote == 'dislike') {
				 message = "Bạn không đồng ý với ý kiến này. Bạn có thể muốn viết ý kiến của mình không ?";
				 if(confirm(message)){
					var url = window.location;
					var review_url = encodeURI(url).replace("=review", "=write-review"); 
					window.location = review_url;	 
				 }
			 }else{
				alert("Cảm ơn bạn đã bày tỏ quan điểm"); 
			 }
		 }
	 });
}

//load this when page load
$(document).ready(function(){
	countShoppingCart('shopping_cart_store');
});